package com.shxzz.shortlink.project.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shxzz.shortlink.project.dao.entity.LinkAccessStatusDO;
import com.shxzz.shortlink.project.dto.req.GroupLinkStatusReqDTO;
import com.shxzz.shortlink.project.dto.req.LinkStatusReqDTO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * @author shxzz
 * @create 2023-12-25-23:27
 * @description 短链接基础访问信息接口
 */
@Mapper
public interface LinkAccessStatusMapper extends BaseMapper<LinkAccessStatusDO> {
    /**
     * 记录短链接访问信息，以小时为单位，当前小时存在则更新，不存在则插入
     * @param linkAccessStatusDO 短链接访问信息
     */
    void recordAccessStatus(LinkAccessStatusDO linkAccessStatusDO);

    /**
     * 查询指定时间段内的每日访问信息
     * @param linkStatusReqDTO 查询参数
     * @return 访问信息列表
     */
    List<LinkAccessStatusDO> selectDailyList(LinkStatusReqDTO linkStatusReqDTO);

    /**
     * 查询指定时间段内的每小时访问信息
     * @param linkStatusReqDTO 查询参数
     * @return 访问信息列表
     */
    List<LinkAccessStatusDO> selectHourList(LinkStatusReqDTO linkStatusReqDTO);

    /**
     * 查询指定时间段内的每天访问信息
     * @param linkStatusReqDTO 查询参数
     * @return 访问信息列表
     */
    List<LinkAccessStatusDO> selectWeekdayList(LinkStatusReqDTO linkStatusReqDTO);

    /**
     * 查询指定时间段内的分组每日访问信息
     * @param groupLinkStatusReqDTO 查询参数
     * @return 分组访问信息列表
     */
    List<LinkAccessStatusDO> selectGroupDailyList(GroupLinkStatusReqDTO groupLinkStatusReqDTO);

    /**
     * 查询短链接分组指定时间段内的每小时访问信息
     * @param groupLinkStatusReqDTO 短链接分组查询参数
     * @return 短链接分组访问信息列表
     */
    List<LinkAccessStatusDO> selectGroupHourList(GroupLinkStatusReqDTO groupLinkStatusReqDTO);

    /**
     * 查询短链接分组指定时间段内的每天访问信息
     * @param groupLinkStatusReqDTO 短链接分组查询参数
     * @return 访短链接分组问信息列表
     */
    List<LinkAccessStatusDO> selectGroupWeekdayList(GroupLinkStatusReqDTO groupLinkStatusReqDTO);
}
